﻿#include "TopicEdit.h"
#include "ui_TopicEdit.h"
#include <QDebug>

TopicEdit::TopicEdit(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TopicEdit)
{
    ui->setupUi(this);
    
    initTopicTableView();
}

TopicEdit::~TopicEdit()
{
    delete ui;
}

/**
 * @brief TopicEdit::getselectedTopicId 获取所选行的主题Id
 * @return 主题Id
 */
QVariant TopicEdit::getselectedTopicId()
{
    return ui->tableView_Topic->getSelectRowId();
}

/**
 * @brief TopicEdit::on_pushButton_add_clicked 添加主题
 */
void TopicEdit::on_pushButton_add_clicked()
{
    int topic_Id;
    QString topic_Name;
    emit sgl_AddTopic(topic_Id,topic_Name);
    ui->tableView_Topic->addRowData(topic_Id,QVector<QVariant>()<<topic_Id<<topic_Name<<0);
    //设置主题长度为不可编辑
    ui->tableView_Topic->setCellEditabled(topic_Id,2,false);
}

/**
 * @brief TopicEdit::on_pushButton_delete_clicked 删除主题
 */
void TopicEdit::on_pushButton_delete_clicked()
{
    QVariant rowId = ui->tableView_Topic->getSelectRowId();
    ui->tableView_Topic->deleteRow(rowId);
    emit sgl_DeleteTopic(rowId); //rowId即主题Id
}

/**
 * @brief TopicEdit::initTopicTableView 初始化主题列表
 */
void TopicEdit::initTopicTableView()
{
    //添加表头
    ui->tableView_Topic->addColumn("主题Id");
    ui->tableView_Topic->addColumn("主题名称");
    ui->tableView_Topic->addColumn("长度");
    //设置列宽自适应表格
    ui->tableView_Topic->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
    //设置表格视图属性
    ui->tableView_Topic->setSelectionBehavior(QAbstractItemView::SelectRows);
    // 主题单元格值改变
    connect(ui->tableView_Topic,&GY_IdTableView::sgl_CellValueChangeSignal,this,&TopicEdit::slt_TopicCellValueChanged);
    //为结果码添加相应的文本信息
    m_ResultTextVec.append("成功");
    m_ResultTextVec.append("原主题不存在");
    m_ResultTextVec.append("主题Id存在重复");
    m_ResultTextVec.append("主题名称存在重复");
    m_ResultTextVec.append("结构体Id存在重复");
    m_ResultTextVec.append("结构体名称存在重复");
    m_ResultTextVec.append("信号Id存在重复");
    m_ResultTextVec.append("信号名称存在重复");
    m_ResultTextVec.append("枚举Id存在重复");
    m_ResultTextVec.append("枚举名称存在重复");
}

/**
 * @brief TopicEdit::on_lineEdit_search_textChanged 搜索文本更改
 * @param arg1 文本
 */
void TopicEdit::on_lineEdit_search_textChanged(const QString &arg1)
{
    ui->tableView_Topic->setFilterRegExp(arg1);
}

/**
 * @brief TopicEdit::slt_GetSelectedTopicId 获取选择的主题Id
 * @return 主题Id
 */
int TopicEdit::slt_GetSelectedTopicId(){
    return ui->tableView_Topic->getSelectRowId().toInt();
}

/**
 * @brief TopicEdit::slt_TopicCellValueChanged 单元格值改变
 * @param rowId 行Id
 * @param columnIndex 列索引
 * @param value 改变后的值
 * @return 结果码
 */
int TopicEdit::slt_TopicCellValueChanged(const QVariant &rowId, const int columnIndex, const QVariant &value)
{
    //过滤题长度信号的修改
    if(columnIndex==2){//主题长度列
        return -1;
    }
    int result = emit sgl_TopicCellValueChanged(rowId,columnIndex,value);
    if(result != 0){
        //将重复的内容改回去
        QVector<QVariant> rowDataVec = emit sgl_GetTopicRowData(rowId);
        ui->tableView_Topic->setRowData(rowId,rowDataVec);
        QMessageBox::information(this,"修改失败",m_ResultTextVec[result],QMessageBox::Ok);
    }else{
        if(columnIndex==0){ //如果是主题Id列，则需要删除item，再重新添加一个item
            QVector<QVariant> newDataVec;
            QString topicIdText = ui->tableView_Topic->getCellText(rowId,0); //获取主题Id
            QString topicNameText = ui->tableView_Topic->getCellText(rowId,1); //获取主题名称
            QString topicLenText = ui->tableView_Topic->getCellText(rowId,2); //获取主题长度
            newDataVec.append(topicIdText);
            newDataVec.append(topicNameText);
            newDataVec.append(topicLenText);
            int index = ui->tableView_Topic->getRowIndex(rowId);
            ui->tableView_Topic->deleteRow(rowId);
            ui->tableView_Topic->insertRowData(index,value.toInt(),newDataVec);
        }
    }
    return result;
}

/**
 * @brief TopicEdit::on_pushButton_import_clicked 导入主题信息
 */
void TopicEdit::on_pushButton_import_clicked()
{
    //TODO导入主题文件，形成主题列表信息
}

/**
 * @brief TopicEdit::on_tableView_Topic_clicked 选择主题
 * @param index
 */
void TopicEdit::on_tableView_Topic_clicked(const QModelIndex &index)
{
    //加载该主题Id下的所有信号信息
    emit sgl_LoadSignalInfo(ParentType::TopicMsg,ui->tableView_Topic->getSelectRowId());
}

